package cn.xingzhe.monster.user.domain.repository;

import cn.xingzhe.monster.user.domain.model.RoleModel;

import java.util.List;
import java.util.Optional;

/**
 * 角色仓储接口
 * 操作领域模型 RoleModel
 *
 * @author System
 * @version 1.0.0
 * @since 2024-01-01
 */
public interface RoleRepository {

    /**
     * 根据ID查询角色
     *
     * @param id 角色ID
     * @return 角色领域模型
     */
    Optional<RoleModel> findById(String id);

    /**
     * 根据角色代码查询角色
     *
     * @param roleCode 角色代码
     * @return 角色领域模型
     */
    Optional<RoleModel> findByRoleCode(String roleCode);

    /**
     * 根据ID列表查询角色
     *
     * @param ids 角色ID列表
     * @return 角色领域模型列表
     */
    List<RoleModel> findByIds(List<String> ids);

    /**
     * 保存角色
     *
     * @param role 角色领域模型
     * @return 保存后的角色领域模型
     */
    RoleModel save(RoleModel role);

    /**
     * 删除角色
     *
     * @param id 角色ID
     */
    void deleteById(String id);

    /**
     * 查询所有角色
     *
     * @return 角色领域模型列表
     */
    List<RoleModel> findAll();
}

